1. Field of the Invention
This invention relates to computer storage systems and, more particularly, to data mirroring and striping.
2. Description of the Related Art
In most cases, computer systems require data storage in one form or another. One type of computer system is a stand-alone system such as, for example, a single workstation running applications and storing data to files on a single disk drive or multiple disk drives that are directly connected to it. In such an environment, the workstation may use a local file system.
Frequently however, computer systems are deployed in a networked environment. In the networked environment, one or more client computer systems running user applications may be connected to one or more file servers which provide networked access to files used by the applications. Such a networked environment is referred to as a distributed file system.
An important feature of distributed file systems is high reliability of the file system. More particularly, it is important that the file system be as immune as possible to any system failures (crashes, power failures, etc.). If a system failure occurs, a less reliable file system may experience file corruption (e.g. if the failure occurred while the file was in the process of being updated). Repairing file corruption may be a complex and time consuming process, and may result in the loss of data. The lost data may result in a subsequent loss of productivity for the user who updated the file, and may even result in permanent loss if the lost data cannot be easily recreated by the user.
In addition to file system reliability, the access speed of the network data storage system is also important. To obtain storage system reliability, data mirroring is a well-known method. To increase system performance, data striping is a well-known method. Both of these methods are described in various literature pertaining to redundant arrays of inexpensive disks (RAID) architectures. Although mirroring does provide high reliability and striping does provide high performance, there are data coherency issues that must be addressed.
A problem may arise when two or more client computers are accessing the same mirrored device. It is possible that the writes to the mirror get processed out of order, thereby possibly causing inconsistencies in the stored data and the mirrored data. Likewise, when striping data across a disk array, it is possible for data writes from different clients to become interleaved, thereby possibly causing inconsistent data.
One solution to the above problems is to use a technique known as locking. Locking generally refers to allowing access to data by only one client at a time. In many applications, locking works. However, it may be a complex function when trying to recover data. Locking may also contain system access time overhead due to extra messages being sent across the network. Therefore, a data coherency solution other than locking is desirable.